update linux/macos CI Qt 5.12.8 (#541)
authortsteven4 <13596209+tsteven4@users.noreply.github.com>
Sat, 18 Apr 2020 12:17:27 +0000 (06:17 -0600)
committerGitHub <noreply@github.com>
Sat, 18 Apr 2020 12:17:27 +0000 (06:17 -0600)
* update CI to 5.12.8 (except appveyor)

we use the appveyor installed Qt 5.12, which is currently
5.12.6.

* update travis yaml syntax.

* update macos build system for Qt 5.12 build.

* try osx_image: xcode11.3

osx_image xcode10.3 failed 3 times in a row.  It showed an
incomplete Qt install and repeated attempts to detatch.

* debug macos qt install fails

* Revert "debug macos qt install fails"

This reverts commit 36df50bc865b515b4545f5f25cc65f5e0575d325.

* Revert "try osx_image: xcode11.3"

This reverts commit ff1e803234b31671e77d8d9ca68e74d62e753b80.

* Revert "update macos build system for Qt 5.12 build."

This reverts commit efedf5132a84141ae351cfe308433bfbda53374b.

* cleanup new docker script.

* build docker image in clean directory.

* move macos Qt 5.12 build to xcode 10.3.

This includes a workaround for a bug in the Qt intaller
that causes segmentation faults in the Qt installer when
the minimal platform is used on macos 10.14, 10.15.

.travis.yml
tools/Dockerfile_qtio
tools/make_docker_image
tools/make_docker_qtio_image [new file with mode: 0755]
tools/qtci/extract-qt-installer
tools/qtci/find_qt_installer [new file with mode: 0755]

index 489fc5b7a4c648f92e983c02b043c6109ab8da68..10526f7ad7162079c4149f0867b9a9557cbcd21c 100644 (file)
@@ -1,10 +1,9 @@
 language: cpp
 
-matrix:
+jobs:
   include:
     - os: linux
       dist: bionic
-      sudo: required
       services: docker
       compiler: gcc
       env:
@@ -12,7 +11,6 @@ matrix:
         - DOCKER_IMG="qtio"
     - os: linux
       dist: bionic
-      sudo: required
       services: docker
       compiler: clang
       env:
@@ -20,7 +18,6 @@ matrix:
         - DOCKER_IMG="qtio"
     - os: linux
       dist: bionic
-      sudo: required
       services: docker
       compiler: gcc
       env:
@@ -28,7 +25,6 @@ matrix:
         - DOCKER_IMG=""
     - os: linux
       dist: bionic
-      sudo: required
       services: docker
       compiler: gcc
       env:
@@ -37,7 +33,6 @@ matrix:
         - DOCKER_SCRIPT="./tools/build_extra_tests"
     - os: linux
       dist: xenial
-      sudo: required
       compiler: gcc
       env:
         - BUILD_TYPE="local"
@@ -67,15 +62,15 @@ matrix:
           - $HOME/Cache
         timeout: 600
     - os: osx
+      osx_image: xcode10.3
       compiler: clang
-      env: QT_VERSION="5.12.7"
+      env: QT_VERSION="5.12.8"
       cache:
         directories:
           - $HOME/Cache
         timeout: 600
     - os: linux
       dist: bionic
-      sudo: required
       compiler: gcc
       env:
         - BUILD_TYPE="coverage"
@@ -100,7 +95,7 @@ script:
 after_success:
   - cd ${TRAVIS_BUILD_DIR}
   # only deploy pushes to master or prs that target master.  the prs will go to transfr.sh, the pushes go to github.
-  - if [ "${TRAVIS_OS_NAME}" = "osx" ] &&  [ "${QT_VERSION}" = "5.12.7" ] && [ "$TRAVIS_BRANCH" = "master" ]; then bash ./tools/uploadtool/upload.sh  gui/GPSBabel-*.dmg; fi
+  - if [ "${TRAVIS_OS_NAME}" = "osx" ] &&  [ "${QT_VERSION}" = "5.12.8" ] && [ "$TRAVIS_BRANCH" = "master" ]; then bash ./tools/uploadtool/upload.sh  gui/GPSBabel-*.dmg; fi
 
 branches:
   except:
index 5824e8a4f0af213dbf579f5a6a6eff8fe4491bd4..b53a66339c17fc139ddcf23b091ef2a6cda1a44d 100644 (file)
@@ -1,6 +1,6 @@
 # this file is used to build the image gpsbabel_build_environment used by travis.
 
-FROM ubuntu:bionic as qt_install
+FROM ubuntu:bionic as qt_install_prep
 WORKDIR /app
 
 # update environment.
@@ -25,14 +25,20 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
   wget \
  && rm -rf /var/lib/apt/lists/*
 
+FROM qt_install_prep as qt_install
 # basic build and test tools
-COPY ./qtci/install-qt-online ./qtci/extract-qt-installer ./qtci/qt-install.qs /app/
-RUN QT_CI_DOWNLOADER="wget -nv -c" PATH=/app:${PATH} ./install-qt-online "qt.qt5.5127.gcc_64,qt.qt5.5127.qtwebengine" /opt
-RUN echo "export PATH=/opt/Qt/5.12.7/gcc_64/bin:$PATH" > /opt/qt-5.12.7.env
+ARG INSTALLER
+ARG QT_CI_PACKAGES
+ARG QT_VERSION
+COPY ./extract-qt-installer ./qt-install.qs ./$INSTALLER /app/
+RUN ./extract-qt-installer $INSTALLER /opt/Qt \
+ && rm ./extract-qt-installer ./qt-install.qs ./$INSTALLER \
+ && echo "export PATH=/opt/Qt/$QT_VERSION/gcc_64/bin:$PATH" > /opt/qt-$QT_VERSION.env
 
 FROM ubuntu:bionic
 LABEL maintainer="https://github.com/tsteven4"
 WORKDIR /app
+ARG QT_VERSION
 
 # update environment.
 ARG DEBIAN_FRONTEND=noninteractive
@@ -89,8 +95,8 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
  && rm -rf /var/lib/apt/lists/*
 
 # Qt
-COPY --from=qt_install /opt/qt-5.12.7.env /opt/qtio.env
-COPY --from=qt_install /opt/Qt/5.12.7 /opt/Qt/5.12.7
+COPY --from=qt_install /opt/qt-$QT_VERSION.env /opt/qtio.env
+COPY --from=qt_install /opt/Qt/$QT_VERSION /opt/Qt/$QT_VERSION
 COPY --from=qt_install /opt/Qt/Licenses /opt/Qt/Licenses
 
 # pkgs needed to generate coverage report:
index c8521af3a73d627ddd9a4c2039ddd378cea4444a..437722b00454a1eba03a758024364952a6bda6ba 100755 (executable)
@@ -3,10 +3,15 @@
 
 versuffix=${1:+_$1} # tag name must be lower case
 tag=$(date -u +%Y%m%dT%H%M%SZ)
-docker build --pull --file Dockerfile${versuffix} --tag gpsbabel_build_environment${versuffix}:latest .
-docker tag gpsbabel_build_environment${versuffix}:latest gpsbabel_build_environment${versuffix}:$tag
-docker tag gpsbabel_build_environment${versuffix}:latest tsteven4/gpsbabel_build_environment${versuffix}:latest 
-docker tag gpsbabel_build_environment${versuffix}:latest tsteven4/gpsbabel_build_environment${versuffix}:$tag
+TMPDIR=$(mktemp -d)
+
+cp Dockerfile${versuffix} $TMPDIR
+
+docker build --pull --file Dockerfile${versuffix} \
+             --tag tsteven4/gpsbabel_build_environment${versuffix}:latest \
+             --tag tsteven4/gpsbabel_build_environment${versuffix}:$tag \
+             $TMPDIR
+/bin/rm -fr $TMPDIR
 docker push tsteven4/gpsbabel_build_environment${versuffix}:$tag
 docker push tsteven4/gpsbabel_build_environment${versuffix}:latest
 docker image ls
diff --git a/tools/make_docker_qtio_image b/tools/make_docker_qtio_image
new file mode 100755 (executable)
index 0000000..d57f26f
--- /dev/null
@@ -0,0 +1,39 @@
+#!/bin/bash -ex
+# you must be logged into docker for the push to succeed.
+
+#versuffix=${1:+_$1} # tag name must be lower case
+versuffix=_qtio
+tag=$(date -u +%Y%m%dT%H%M%SZ)
+
+QT_VERSION=5.12.8
+QT_VERSION_SHORT=${QT_VERSION//./}
+QT_CI_PACKAGES="qt.qt5.${QT_VERSION_SHORT}.gcc_64,qt.qt5.${QT_VERSION_SHORT}.qtwebengine"
+DOWNLOAD_URL=$(./qtci/find_qt_installer ${QT_VERSION})
+INSTALLER=$(basename $DOWNLOAD_URL)
+TMPDIR=$(mktemp -d)
+
+cp Dockerfile${versuffix} $TMPDIR
+cp ./qtci/extract-qt-installer ./qtci/qt-install.qs $TMPDIR
+wget -nv -c -N -P $TMPDIR ${DOWNLOAD_URL}
+
+docker build --pull --file Dockerfile${versuffix} \
+             --target qt_install_prep \
+             $TMPDIR
+docker build --pull --file Dockerfile${versuffix} \
+             --network none \
+             --build-arg INSTALLER=${INSTALLER} \
+             --build-arg QT_CI_PACKAGES=${QT_CI_PACKAGES} \
+             --build-arg QT_VERSION=${QT_VERSION} \
+             --target qt_install \
+             $TMPDIR
+docker build --pull --file Dockerfile${versuffix} \
+             --build-arg INSTALLER=${INSTALLER} \
+             --build-arg QT_CI_PACKAGES=${QT_CI_PACKAGES} \
+             --build-arg QT_VERSION=${QT_VERSION} \
+             --tag tsteven4/gpsbabel_build_environment${versuffix}:latest \
+             --tag tsteven4/gpsbabel_build_environment${versuffix}:$tag \
+             $TMPDIR
+/bin/rm -fr $TMPDIR
+docker push tsteven4/gpsbabel_build_environment${versuffix}:$tag
+docker push tsteven4/gpsbabel_build_environment${versuffix}:latest
+docker image ls
index acc8737b579def9449bc24c6866768d4386c7fb8..073302bdcea1a9c277db335a3cdb31ca6fa2dace 100755 (executable)
@@ -84,17 +84,25 @@ fi
 
 unset DISPLAY
 
+# platform minimal doesn't work on macos 10.14, 10.15.  It did work on 10.13.
+# https://bugreports.qt.io/browse/QTIFW-1471
+PLATFORM="--platform minimal"
+if [ "$(uname)" = "Darwin" ]; then
+  vn=$(sw_vers -productVersion | cut -d. -f2,2)
+  if [ $vn -ge 14 ]; then
+     unset PLATFORM
+  fi
+fi
+
 if [ -n "$DISABLE_PROGRESS_REPORT" ]
 then
-       QT_QPA_PLATFORM=minimal $INSTALLER --script $SCRIPT QTCI_LIST_PACKAGES="$LIST_PACKAGES" QTCI_PACKAGES="$PACKAGES" QTCI_OUTPUT="$OUTPUT" 
+       $INSTALLER $PLATFORM --script $SCRIPT QTCI_LIST_PACKAGES="$LIST_PACKAGES" QTCI_PACKAGES="$PACKAGES" QTCI_OUTPUT="$OUTPUT" 
 else
-       ARGS="-v"
-
        if [ -n "$VERBOSE" ]
        then
-               QT_QPA_PLATFORM=minimal $INSTALLER $ARGS --script $SCRIPT QTCI_LIST_PACKAGES="$LIST_PACKAGES" QTCI_PACKAGES="$PACKAGES" QTCI_OUTPUT="$OUTPUT"
+               $INSTALLER --verbose $PLATFORM --script $SCRIPT QTCI_LIST_PACKAGES="$LIST_PACKAGES" QTCI_PACKAGES="$PACKAGES" QTCI_OUTPUT="$OUTPUT"
        else
-               QT_QPA_PLATFORM=minimal $INSTALLER $ARGS --script $SCRIPT QTCI_LIST_PACKAGES="$LIST_PACKAGES" QTCI_PACKAGES="$PACKAGES" QTCI_OUTPUT="$OUTPUT" | grep "\(QTCI\|operation\)"
+               $INSTALLER --verbose $PLATFORM --script $SCRIPT QTCI_LIST_PACKAGES="$LIST_PACKAGES" QTCI_PACKAGES="$PACKAGES" QTCI_OUTPUT="$OUTPUT" | grep "\(QTCI\|operation\)"
        fi
 fi
 
diff --git a/tools/qtci/find_qt_installer b/tools/qtci/find_qt_installer
new file mode 100755 (executable)
index 0000000..d1b5486
--- /dev/null
@@ -0,0 +1,24 @@
+#!/bin/bash -e
+# Reference:
+#   https://github.com/musescore/MuseScore/blob/master/build/travis/job_macos/install.sh
+
+QT_VERSION=${1:-5.12.0}
+
+QT_MAJOR_VERSION=$(echo ${QT_VERSION} | cut -d "." -f 1)
+QT_MINOR_VERSION=$(echo ${QT_VERSION} | cut -d "." -f 2)
+if [ "$(uname)" = "Darwin" ]; then
+  if { [ "${QT_MAJOR_VERSION}" -eq 5 ] && [ "${QT_MINOR_VERSION}" -ge 9 ]; } || [ "${QT_MAJOR_VERSION}" -ge 6 ]; then
+    # this was good from 5.9.0 through at least 5.12.0
+    DOWNLOAD_URL=https://download.qt.io/archive/qt/${QT_MAJOR_VERSION}.${QT_MINOR_VERSION}/${QT_VERSION}/qt-opensource-mac-x64-${QT_VERSION}.dmg
+  else
+    # this was good from 5.2.1 through 5.8.0
+    DOWNLOAD_URL=https://download.qt.io/archive/qt/${QT_MAJOR_VERSION}.${QT_MINOR_VERSION}/${QT_VERSION}/qt-opensource-mac-x64-clang-${QT_VERSION}.dmg
+  fi
+elif [ "$(uname)" = "Linux" ]; then
+  # this was good from 5.2.1 through at least 5.12.0
+  DOWNLOAD_URL=https://download.qt.io/archive/qt/${QT_MAJOR_VERSION}.${QT_MINOR_VERSION}/${QT_VERSION}/qt-opensource-linux-x64-${QT_VERSION}.run
+else
+  echo "Unsupported system." >&2
+  exit 1
+fi
+echo $DOWNLOAD_URL